package v1

import (
"github.com/gin-gonic/gin"
"github.com/spf13/cast"
"hr/api/dto"
"hr/api/middleware"
"hr/db"
"hr/utils"
)

// GetPublicityManage
// @Summary 获取所有宣传信息
// @Tags 宣传信息相关api
// @Accept  json
// @Produce json
// @Param Access-Token header string true "Authentication header"
// @Param pageNo query string true "页码"
// @Param pageSize query string true "页大小"
// @Success 200 {object} utils.JsonContent
// @Failure 400 {object} utils.JsonContent
// @Failure 500 {object} utils.JsonContent
// @Router /api/v1/auth/publicityManage [get]
func GetPublicityManage(c *gin.Context)  {
	pageNoStr := c.Query("pageNo")
	pageSizeStr := c.Query("pageSize")

	var pageNo,pageSize int
	if !utils.IsStringEmpty(pageNoStr) {
		pageNo = cast.ToInt(pageNoStr)
	}
	if !utils.IsStringEmpty(pageSizeStr) {
		pageSize = cast.ToInt(pageSizeStr)
	}
	paging := &dto.Pagination{
		PageNo:  pageNo,
		PageSize: pageSize,
	}

	d, err := db.GetPublicityManagePaging(*paging)
	if err != nil {
		utils.EchoError(c, err.Error())
		return
	}
	utils.EchoSuccess(c, d, "请求成功")
	return
}

// CreatePublicityManage
// @Summary 创建宣传信息类型
// @Tags 宣传信息相关api
// @Accept  json
// @Produce json
// @Param Access-Token header string true "Authentication header"
// @Param PublicityManageRequest body dto.PublicityManageRequest true "信息"
// @Success 200 {object} utils.JsonContent
// @Failure 400 {object} utils.JsonContent
// @Failure 500 {object} utils.JsonContent
// @Router /api/v1/auth/publicityManage [post]
func CreatePublicityManage(c *gin.Context)  {
	p := &dto.PublicityManageRequest{}
	if err := c.ShouldBindJSON(p); err != nil {
		utils.EchoError(c,"缺少必要参数信息")
		return
	}
	id, _ := middleware.GetCurrentUserId(c)
	m, err := db.CreatePublicityManage(*p, cast.ToString(id))
	if err != nil {
		utils.EchoError(c, err.Error())
		return
	}

	utils.EchoSuccess(c, m, "创建成功")
	return
}

// UpdatePublicityManage
// @Summary 更新宣传信息
// @Tags 宣传信息相关api
// @Accept  json
// @Produce json
// @Param Access-Token header string true "Authentication header"
// @Param PublicityManageRequest body dto.PublicityManageRequest true "信息"
// @Param id path string true "主键ID"
// @Success 200 {object} utils.JsonContent
// @Failure 400 {object} utils.JsonContent
// @Failure 500 {object} utils.JsonContent
// @Router /api/v1/auth/publicityManage/{id} [put]
func UpdatePublicityManage(c *gin.Context)  {
	p := &dto.PublicityManageRequest{}
	if err := c.ShouldBindJSON(p); err != nil {
		utils.EchoError(c,"缺少必要参数信息")
		return
	}
	idStr := c.Param("id")
	if utils.IsStringEmpty(idStr) {
		utils.EchoError(c,"缺少ID")
		return
	}
	_, _ ,tag := db.GetPublicityManage(map[string]interface{}{"id": idStr})
	if tag == "0" || tag == "1" {
		utils.EchoError(c,"此宣传信息不存在")
		return
	}
	id, _ := middleware.GetCurrentUserId(c)
	if p.Status != "" {
		p.CheckTime = utils.CurrentDateTime()
	}
	m, err := db.UpdatePublicityManage(cast.ToUint(idStr),*p, cast.ToString(id))
	if err != nil {
		utils.EchoError(c, err.Error())
		return
	}

	utils.EchoSuccess(c, m, "更新成功")
	return
}

// DeletePublicityManage
// @Summary 删除宣传信息
// @Tags 宣传信息相关api
// @Accept  json
// @Produce json
// @Param Access-Token header string true "Authentication header"
// @Param id path string true "主键ID"
// @Success 200 {object} utils.JsonContent
// @Failure 400 {object} utils.JsonContent
// @Failure 500 {object} utils.JsonContent
// @Router /api/v1/auth/publicityManage/{id} [delete]
func DeletePublicityManage(c *gin.Context)  {
	idStr := c.Param("id")
	if utils.IsStringEmpty(idStr) {
		utils.EchoError(c,"缺少ID")
		return
	}
	_, _ ,tag := db.GetPublicityManage(map[string]interface{}{"id": idStr})
	if tag == "0" || tag == "1" {
		utils.EchoError(c,"此宣传信息不存在")
		return
	}
	_, err := db.DeletePublicityManage(cast.ToUint(idStr))
	if err != nil {
		utils.EchoError(c, err.Error())
		return
	}

	utils.EchoSuccess(c, nil, "删除成功")
	return
}

